package datastructures.queues;

public interface QueueADT<T> extends Iterable<T> {

	/**
	 * Adds one element the end of the queue
	 *
	 * @param element : generic type
	 */
	public void enqueue(T element);

	/**
	 * Return one element the front of the queue after remove the element from the queue
	 *
	 * @return : generic type
	 */
	public T dequeue();

	/**
	 * Return one element the front of the queue without remove the element from the queue
	 *
	 * @return : generic type
	 */
	public T first();

	/**
	 * Return true if the queue is empty
	 * @return
	 */
	public boolean isEmpty();

	/**
	 * Return the number of element in the queue
	 * @return
	 */
	public int size();

	/**
	 * Return a string representation of this queue
	 *
	 * @return : string
	 */
	public String toString();
}
